[小ネタ] EC2インスタンスメタデータを簡単に確認する (PowerShell編)

[小ネタ] EC2インスタンスメタデータを簡単に確認する (PowerShell編)

Clock Icon2019.03.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。

AWS CLIEC2 Instance Metadata Query Toolを使ってインスタンスメタデータへアクセスをするネタが弊社望月によって公開されていますが、本記事ではAWS Tools for PowerShellを使った場合の方法を紹介します。

https://dev.classmethod.jp/cloud/aws/ec2-metadata-command/

前提条件

AWS Tools for PowerShellバージョン3系のはなしです。
バージョン2以前は該当しませんので注意してください。

Get-EC2InstanceMetadata

AWS Tools for PowerShellではVer.3.1.73.0(2016-05-26)からGet-EC2InstanceMetadataコマンドレットが提供されておりメタデータへのアクセスが抽象化されています。

このコマンドレットではListCategoryパラメータを使うとメタデータのカテゴリ一覧を取得できます。

Get-EC2InstanceMetadata -ListCategory

image

そしてCategoryパラメータを指定してカテゴリ毎のメタデータを取得できます。

Get-EC2InstanceMetadata -Category AmiId

image

また、Pathパラメータを指定して階層の深いところにあるメタデータを一発で取得することも可能です。

Get-EC2InstanceMetadata -Path /network/interfaces/macs

image

その他細かい点についてはコマンドレットのリファレンスを参照してください。

Amazon.Util.EC2InstanceMetadata クラス

ここまでは普通にドキュメントにも載っている手段ですが、ここからはちょっと裏技的な方法を紹介します。

AWS Tools for PowerShellは内部でAWS SDK for .NETを使っており、このSDKにはユーティリティクラスとしてAmazon.Util.EC2InstanceMetadataが提供されています。
PowerShellは.NETのオブジェクトを扱うシェルですのでこのAmazon.Util.EC2InstanceMetadataクラスを直接扱うことができます。

先ほどのGet-EC2InstanceMetadataコマンドレットで取得した情報も以下の様な感じで取得できます。
(カテゴリ情報は Get-EC2InstanceMetadata 独自のものなので取得できません)

# クラスをロードするために`Import-Module`を明示する必要があります
Import-Module AWSPowerShell

[Amazon.Util.EC2InstanceMetadata]::AmiId

[Amazon.Util.EC2InstanceMetadata]::NetworkInterfaces[0].MacAddress
# PowerShell 3.0以降で可能な記法
[Amazon.Util.EC2InstanceMetadata]::NetworkInterfaces.MacAddress

image

こちらも細かい内容はリファレンスを参照してください。

最後に

本記事ではPowerShellを使った2通りのメタデータの取得方法を紹介しました。

用途に応じて好きな方を使えば良いと思います。
個人的にはコンソール上でちょっとデータを確認するときはGet-EC2InstanceMetadataを、スクリプト中ではAmazon.Util.EC2InstanceMetadataを使うのが良さそうだなと感じています。

もちろんこれらの機能を使わずInvoke-WebRequestInvoke-RestMethodを使い続けるのも良いでしょう。
とくに応答速度が重視されるときはInvoke-WebRequestInvoke-RestMethodの方が良い場合が多いと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.